home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / os2 / adaptor.zip / ADAPT.ZIP / adaptor / src / calling.c < prev    next >
Text File  |  1994-01-03  |  15KB  |  696 lines

  1. # include "Calling.h"
  2. # include "yyCallin.w"
  3. # include <stdio.h>
  4. # if defined __STDC__ | defined __cplusplus
  5. #  include <stdlib.h>
  6. # else
  7.    extern void exit ();
  8. # endif
  9. # include "Tree.h"
  10. # include "Definiti.h"
  11. # include "CallGrap.h"
  12.  
  13. # ifndef NULL
  14. # define NULL 0L
  15. # endif
  16. # ifndef false
  17. # define false 0
  18. # endif
  19. # ifndef true
  20. # define true 1
  21. # endif
  22.  
  23. # ifdef yyInline
  24. # define yyALLOC(tree, free, max, alloc, nodesize, make, ptr, kind) \
  25.   if ((ptr = (tree) free) >= (tree) max) ptr = alloc (); \
  26.   free += nodesize [kind]; \
  27.   ptr->yyHead.yyMark = 0; \
  28.   ptr->Kind = kind;
  29. # else
  30. # define yyALLOC(tree, free, max, alloc, nodesize, make, ptr, kind) ptr = make (kind);
  31. # endif
  32.  
  33. # define yyWrite(s) (void) fputs (s, yyf)
  34. # define yyWriteNl (void) fputc ('\n', yyf)
  35.  
  36. # line 16 "Calling.puma"
  37.  
  38. #include "Tree.h"
  39. #include "Definiti.h"
  40. #include "CallGraf.h"
  41.  
  42. static tCallGraph CurrentUnit;   /* globally used for a unit */
  43.  
  44. FILE *CGFile;
  45.  
  46.  
  47. static FILE * yyf = stdout;
  48.  
  49. static void yyAbort
  50. # ifdef __cplusplus
  51.  (char * yyFunction)
  52. # else
  53.  (yyFunction) char * yyFunction;
  54. # endif
  55. {
  56.  (void) fprintf (stderr, "Error: module Calling, routine %s failed\n", yyFunction);
  57.  exit (1);
  58. }
  59.  
  60. void Calling ARGS((tTree t));
  61. void OutCallGraph ARGS((tCallGraph c));
  62. static void OutCallEdges ARGS((tCallGraph c));
  63. static int UnitKind ARGS((tDefinitions o));
  64.  
  65. void Calling
  66. # if defined __STDC__ | defined __cplusplus
  67. (register tTree t)
  68. # else
  69. (t)
  70.  register tTree t;
  71. # endif
  72. {
  73. # line 59 "Calling.puma"
  74.  
  75. unsigned char string[256];
  76. tCallGraph CN;
  77. int kind;
  78. tObject Obj;
  79.  
  80.   if (t == NoTree) return;
  81.  
  82.   switch (t->Kind) {
  83.   case kCOMP_UNIT:
  84. # line 72 "Calling.puma"
  85.   {
  86. # line 73 "Calling.puma"
  87.    Calling (t->COMP_UNIT.COMP_ELEMENTS);
  88.   }
  89.    return;
  90.  
  91.   case kDECL_LIST:
  92. # line 76 "Calling.puma"
  93.   {
  94. # line 77 "Calling.puma"
  95.    Calling (t->DECL_LIST.Elem);
  96. # line 78 "Calling.puma"
  97.    Calling (t->DECL_LIST.Next);
  98.   }
  99.    return;
  100.  
  101.   case kPROGRAM_DECL:
  102. # line 81 "Calling.puma"
  103.   {
  104. # line 82 "Calling.puma"
  105.    GetString (t->PROGRAM_DECL.Name, string);
  106. # line 83 "Calling.puma"
  107.    Obj = GetDeclEntry (t->PROGRAM_DECL.Name, GetUnitEntries ());
  108. # line 84 "Calling.puma"
  109.  if (Obj == NoObject)
  110.              printf ("Unit %s no found in UnitEntries-Table\n", string);
  111. # line 86 "Calling.puma"
  112.    CurrentUnit = CallGraphSearchNode (Obj, 0);
  113. # line 87 "Calling.puma"
  114.    Calling (t->PROGRAM_DECL.PROGRAM_BODY);
  115.   }
  116.    return;
  117.  
  118.   case kPROC_DECL:
  119. # line 90 "Calling.puma"
  120.   {
  121. # line 91 "Calling.puma"
  122.    GetString (t->PROC_DECL.Name, string);
  123. # line 92 "Calling.puma"
  124.    Obj = GetDeclEntry (t->PROC_DECL.Name, GetUnitEntries ());
  125. # line 93 "Calling.puma"
  126.  if (Obj == NoObject)
  127.              printf ("Unit %s no found in UnitEntries-Table\n", string);
  128. # line 95 "Calling.puma"
  129.    CurrentUnit = CallGraphSearchNode (Obj, 0);
  130. # line 96 "Calling.puma"
  131.    Calling (t->PROC_DECL.PROC_BODY);
  132.   }
  133.    return;
  134.  
  135.   case kFUNC_DECL:
  136. # line 99 "Calling.puma"
  137.   {
  138. # line 100 "Calling.puma"
  139.    GetString (t->FUNC_DECL.Name, string);
  140. # line 101 "Calling.puma"
  141.    Obj = GetDeclEntry (t->FUNC_DECL.Name, GetUnitEntries ());
  142. # line 102 "Calling.puma"
  143.    CurrentUnit = CallGraphSearchNode (Obj, 0);
  144. # line 103 "Calling.puma"
  145.  if (Obj == NoObject)
  146.              printf ("Unit %s no found in UnitEntries-Table\n", string);
  147. # line 105 "Calling.puma"
  148.    Calling (t->FUNC_DECL.FUNC_BODY);
  149.   }
  150.    return;
  151.  
  152.   case kBODY_NODE:
  153. # line 108 "Calling.puma"
  154.   {
  155. # line 109 "Calling.puma"
  156.    Calling (t->BODY_NODE.STATS);
  157.   }
  158.    return;
  159.  
  160.   case kVAR_DECL:
  161. # line 118 "Calling.puma"
  162.    return;
  163.  
  164.   case kPARAMETER_DECL:
  165. # line 121 "Calling.puma"
  166.    return;
  167.  
  168.   case kCOMMON_DECL:
  169. # line 124 "Calling.puma"
  170.   {
  171. # line 126 "Calling.puma"
  172.    Calling (t->COMMON_DECL.IDS);
  173.   }
  174.    return;
  175.  
  176.   case kEQV_DECL:
  177. # line 129 "Calling.puma"
  178.   {
  179. # line 131 "Calling.puma"
  180.    Calling (t->EQV_DECL.VARS);
  181.   }
  182.    return;
  183.  
  184.   case kDATA_DECL:
  185. # line 134 "Calling.puma"
  186.   {
  187. # line 135 "Calling.puma"
  188.    Calling (t->DATA_DECL.VARS);
  189. # line 136 "Calling.puma"
  190.    Calling (t->DATA_DECL.VALS);
  191.   }
  192.    return;
  193.  
  194.   case kTYPE_LIST:
  195. # line 154 "Calling.puma"
  196.   {
  197. # line 155 "Calling.puma"
  198.    Calling (t->TYPE_LIST.Elem);
  199. # line 156 "Calling.puma"
  200.    Calling (t->TYPE_LIST.Next);
  201.   }
  202.    return;
  203.  
  204.   case kINDEX_TYPE:
  205. # line 159 "Calling.puma"
  206.   {
  207. # line 160 "Calling.puma"
  208.    Calling (t->INDEX_TYPE.LOWER);
  209. # line 161 "Calling.puma"
  210.    Calling (t->INDEX_TYPE.UPPER);
  211.   }
  212.    return;
  213.  
  214.   case kACF_LIST:
  215. # line 170 "Calling.puma"
  216.   {
  217. # line 171 "Calling.puma"
  218.    Calling (t->ACF_LIST.Elem);
  219. # line 172 "Calling.puma"
  220.    Calling (t->ACF_LIST.Next);
  221.   }
  222.    return;
  223.  
  224.   case kACF_BASIC:
  225. # line 175 "Calling.puma"
  226.   {
  227. # line 176 "Calling.puma"
  228.    Calling (t->ACF_BASIC.BASIC_STMT);
  229.   }
  230.    return;
  231.  
  232.   case kACF_IF:
  233. # line 179 "Calling.puma"
  234.   {
  235. # line 180 "Calling.puma"
  236.    Calling (t->ACF_IF.IF_EXP);
  237. # line 181 "Calling.puma"
  238.    Calling (t->ACF_IF.THEN_PART);
  239. # line 182 "Calling.puma"
  240.    Calling (t->ACF_IF.ELSE_PART);
  241.   }
  242.    return;
  243.  
  244.   case kACF_WHERE:
  245. # line 185 "Calling.puma"
  246.   {
  247. # line 186 "Calling.puma"
  248.    Calling (t->ACF_WHERE.WHERE_EXP);
  249. # line 187 "Calling.puma"
  250.    Calling (t->ACF_WHERE.TRUE_PART);
  251. # line 188 "Calling.puma"
  252.    Calling (t->ACF_WHERE.FALSE_PART);
  253.   }
  254.    return;
  255.  
  256.   case kACF_CASE:
  257. # line 191 "Calling.puma"
  258.   {
  259. # line 192 "Calling.puma"
  260.    Calling (t->ACF_CASE.CASE_EXP);
  261. # line 193 "Calling.puma"
  262.    Calling (t->ACF_CASE.CASE_ALTS);
  263. # line 194 "Calling.puma"
  264.    Calling (t->ACF_CASE.CASE_OTHERWISE);
  265.   }
  266.    return;
  267.  
  268.   case kACF_WHILE:
  269. # line 197 "Calling.puma"
  270.   {
  271. # line 198 "Calling.puma"
  272.    Calling (t->ACF_WHILE.WHILE_EXP);
  273. # line 199 "Calling.puma"
  274.    Calling (t->ACF_WHILE.WHILE_BODY);
  275.   }
  276.    return;
  277.  
  278.   case kACF_DO:
  279. # line 202 "Calling.puma"
  280.   {
  281. # line 203 "Calling.puma"
  282.    Calling (t->ACF_DO.DO_RANGE);
  283. # line 204 "Calling.puma"
  284.    Calling (t->ACF_DO.DO_BODY);
  285.   }
  286.    return;
  287.  
  288.   case kASSIGN_STMT:
  289. # line 207 "Calling.puma"
  290.   {
  291. # line 208 "Calling.puma"
  292.    Calling (t->ASSIGN_STMT.ASSIGN_VAR);
  293. # line 209 "Calling.puma"
  294.    Calling (t->ASSIGN_STMT.ASSIGN_EXP);
  295.   }
  296.    return;
  297.  
  298.   case kCALL_STMT:
  299. # line 212 "Calling.puma"
  300.   {
  301. # line 213 "Calling.puma"
  302.    GetString (t->CALL_STMT.CALL_ID->PROC_OBJ.Ident, string);
  303. # line 214 "Calling.puma"
  304.    Calling (t->CALL_STMT.CALL_PARAMS);
  305. # line 215 "Calling.puma"
  306.    kind = UnitKind (t->CALL_STMT.CALL_ID->PROC_OBJ.Object);
  307. # line 216 "Calling.puma"
  308.  if (kind != 3)
  309.            { CN = CallGraphSearchNode (t->CALL_STMT.CALL_ID->PROC_OBJ.Object, kind);
  310.              CallGraphInsertEdge (CurrentUnit, CN);
  311.            }
  312.  
  313.  
  314.   }
  315.    return;
  316.  
  317.   case kBTP_LIST:
  318. # line 230 "Calling.puma"
  319.   {
  320. # line 231 "Calling.puma"
  321.    Calling (t->BTP_LIST.Elem);
  322. # line 232 "Calling.puma"
  323.    Calling (t->BTP_LIST.Next);
  324.   }
  325.    return;
  326.  
  327.   case kVAR_PARAM:
  328. # line 235 "Calling.puma"
  329.   {
  330. # line 236 "Calling.puma"
  331.    Calling (t->VAR_PARAM.V);
  332.   }
  333.    return;
  334.  
  335.   case kVALUE_PARAM:
  336. # line 239 "Calling.puma"
  337.   {
  338. # line 240 "Calling.puma"
  339.    printf ("There shouldn't be any value params in FORTRAN\n");
  340.   }
  341.    return;
  342.  
  343.   case kBTE_LIST:
  344. # line 243 "Calling.puma"
  345.   {
  346. # line 244 "Calling.puma"
  347.    Calling (t->BTE_LIST.Elem);
  348. # line 245 "Calling.puma"
  349.    Calling (t->BTE_LIST.Next);
  350.   }
  351.    return;
  352.  
  353.   case kVAR_EXP:
  354. # line 254 "Calling.puma"
  355.   {
  356. # line 255 "Calling.puma"
  357.    Calling (t->VAR_EXP.V);
  358.   }
  359.    return;
  360.  
  361.   case kUSED_VAR:
  362. # line 258 "Calling.puma"
  363.    return;
  364.  
  365.   case kLOOP_VAR:
  366. # line 261 "Calling.puma"
  367.    return;
  368.  
  369.   case kINDEXED_VAR:
  370. # line 264 "Calling.puma"
  371.   {
  372. # line 265 "Calling.puma"
  373.    Calling (t->INDEXED_VAR.IND_EXPS);
  374. # line 266 "Calling.puma"
  375.    Calling (t->INDEXED_VAR.IND_VAR);
  376.   }
  377.    return;
  378.  
  379.   case kDUMMY_EXP:
  380. # line 275 "Calling.puma"
  381.    return;
  382.  
  383.   case kCONST_EXP:
  384. # line 278 "Calling.puma"
  385.    return;
  386.  
  387.   case kARRAY_EXP:
  388. # line 281 "Calling.puma"
  389.   {
  390. # line 282 "Calling.puma"
  391.    Calling (t->ARRAY_EXP.ELEMENTS);
  392.   }
  393.    return;
  394.  
  395.   case kSLICE_EXP:
  396. # line 285 "Calling.puma"
  397.   {
  398. # line 286 "Calling.puma"
  399.    Calling (t->SLICE_EXP.START);
  400. # line 287 "Calling.puma"
  401.    Calling (t->SLICE_EXP.STOP);
  402. # line 288 "Calling.puma"
  403.    Calling (t->SLICE_EXP.INC);
  404.   }
  405.    return;
  406.  
  407.   case kOP_EXP:
  408. # line 291 "Calling.puma"
  409.   {
  410. # line 292 "Calling.puma"
  411.    Calling (t->OP_EXP.OPND1);
  412. # line 293 "Calling.puma"
  413.    Calling (t->OP_EXP.OPND2);
  414.   }
  415.    return;
  416.  
  417.   case kOP1_EXP:
  418. # line 296 "Calling.puma"
  419.   {
  420. # line 297 "Calling.puma"
  421.    Calling (t->OP1_EXP.OPND);
  422.   }
  423.    return;
  424.  
  425.   case kFUNC_CALL_EXP:
  426. # line 300 "Calling.puma"
  427.   {
  428. # line 301 "Calling.puma"
  429.    GetString (t->FUNC_CALL_EXP.FUNC_ID->PROC_OBJ.Ident, string);
  430. # line 302 "Calling.puma"
  431.    Calling (t->FUNC_CALL_EXP.FUNC_PARAMS);
  432. # line 303 "Calling.puma"
  433.    kind = UnitKind (t->FUNC_CALL_EXP.FUNC_ID->PROC_OBJ.Object);
  434. # line 304 "Calling.puma"
  435.  if (kind != 3)
  436.            { CN = CallGraphSearchNode (t->FUNC_CALL_EXP.FUNC_ID->PROC_OBJ.Object, kind);
  437.              CallGraphInsertEdge (CurrentUnit, CN);
  438.            }
  439.  
  440.  
  441.   }
  442.    return;
  443.  
  444.   }
  445.  
  446. ;
  447. }
  448.  
  449. void OutCallGraph
  450. # if defined __STDC__ | defined __cplusplus
  451. (register tCallGraph c)
  452. # else
  453. (c)
  454.  register tCallGraph c;
  455. # endif
  456. {
  457. # line 320 "Calling.puma"
  458.  
  459. unsigned char string[256];
  460.  
  461.   if (c == NoCallGraph) return;
  462.   if (c->Kind == kCallGraph) {
  463. # line 324 "Calling.puma"
  464.   {
  465. # line 325 "Calling.puma"
  466.    fprintf (CGFile, "UserNodes : \n");
  467. # line 326 "Calling.puma"
  468.    fprintf (CGFile, "=========== \n\n");
  469. # line 327 "Calling.puma"
  470.  if (c->CallGraph.UserNodes != NoCallGraph) OutCallGraph (c->CallGraph.UserNodes);
  471. # line 328 "Calling.puma"
  472.    fprintf (CGFile, "\n");
  473. # line 329 "Calling.puma"
  474.    fprintf (CGFile, "Called Intrinsics : \n");
  475. # line 330 "Calling.puma"
  476.    fprintf (CGFile, "=================== \n\n");
  477. # line 331 "Calling.puma"
  478.  if (c->CallGraph.IntrinsicNodes != NoCallGraph)
  479.                     OutCallGraph (c->CallGraph.IntrinsicNodes);
  480. # line 333 "Calling.puma"
  481.    fprintf (CGFile, "\n");
  482. # line 334 "Calling.puma"
  483.    fprintf (CGFile, "Called Externals : \n");
  484. # line 335 "Calling.puma"
  485.    fprintf (CGFile, "================== \n\n");
  486. # line 336 "Calling.puma"
  487.  if (c->CallGraph.ExternalNodes != NoCallGraph)
  488.                     OutCallGraph (c->CallGraph.ExternalNodes);
  489. # line 338 "Calling.puma"
  490.    fprintf (CGFile, "\n");
  491.   }
  492.    return;
  493.  
  494.   }
  495.   if (c->Kind == kCallNodeList) {
  496. # line 341 "Calling.puma"
  497.   {
  498. # line 342 "Calling.puma"
  499.    OutCallGraph (c->CallNodeList.Elem);
  500. # line 343 "Calling.puma"
  501.  if (c->CallNodeList.Next != NoCallGraph)
  502.             OutCallGraph (c->CallNodeList.Next);
  503.   }
  504.    return;
  505.  
  506.   }
  507.   if (c->Kind == kCallNode) {
  508.   if (c->CallNode.val->Kind == kProcObject) {
  509.   if (c->CallNode.val->ProcObject.decl->Kind == kPROGRAM_DECL) {
  510. # line 347 "Calling.puma"
  511.   {
  512. # line 349 "Calling.puma"
  513.    GetString (c->CallNode.val->ProcObject.ident, string);
  514. # line 350 "Calling.puma"
  515.    fprintf (CGFile, "PROGRAM %s -- \n", string);
  516. # line 351 "Calling.puma"
  517.  if (c->CallNode.calling != NoCallGraph)
  518.             { fprintf (CGFile, "  %s : calls ", string);
  519.               OutCallEdges (c->CallNode.calling);
  520.               fprintf (CGFile, "\n");           }
  521.  
  522. # line 356 "Calling.puma"
  523.  if (c->CallNode.called_by != NoCallGraph)
  524.             { fprintf (CGFile, "  %s : called by ", string);
  525.               OutCallEdges (c->CallNode.called_by);
  526.               fprintf (CGFile, "\n");           }
  527.  
  528.   }
  529.    return;
  530.  
  531.   }
  532. # line 363 "Calling.puma"
  533.   {
  534. # line 364 "Calling.puma"
  535.    GetString (c->CallNode.val->ProcObject.ident, string);
  536. # line 365 "Calling.puma"
  537.    fprintf (CGFile, "SUBROUTINE %s -- \n", string);
  538. # line 366 "Calling.puma"
  539.  if (c->CallNode.calling != NoCallGraph)
  540.             { fprintf (CGFile, "  %s : calls ", string);
  541.               OutCallEdges (c->CallNode.calling);
  542.               fprintf (CGFile, "\n");           }
  543.  
  544. # line 371 "Calling.puma"
  545.  if (c->CallNode.called_by != NoCallGraph)
  546.             { fprintf (CGFile, "  %s : called by ", string);
  547.               OutCallEdges (c->CallNode.called_by);
  548.               fprintf (CGFile, "\n");           }
  549.  
  550.   }
  551.    return;
  552.  
  553.   }
  554.   if (c->CallNode.val->Kind == kFuncObject) {
  555. # line 378 "Calling.puma"
  556.   {
  557. # line 379 "Calling.puma"
  558.    GetString (c->CallNode.val->FuncObject.ident, string);
  559. # line 380 "Calling.puma"
  560.    fprintf (CGFile, "FUNCTION %s -- \n", string);
  561. # line 381 "Calling.puma"
  562.  if (c->CallNode.calling != NoCallGraph)
  563.             { fprintf (CGFile, "  %s : calls ", string);
  564.               OutCallEdges (c->CallNode.calling);
  565.               fprintf (CGFile, "\n");           }
  566.  
  567. # line 386 "Calling.puma"
  568.  if (c->CallNode.called_by != NoCallGraph)
  569.             { fprintf (CGFile, "  %s : called by ", string);
  570.               OutCallEdges (c->CallNode.called_by);
  571.               fprintf (CGFile, "\n");           }
  572.  
  573.   }
  574.    return;
  575.  
  576.   }
  577.   }
  578. ;
  579. }
  580.  
  581. static void OutCallEdges
  582. # if defined __STDC__ | defined __cplusplus
  583. (register tCallGraph c)
  584. # else
  585. (c)
  586.  register tCallGraph c;
  587. # endif
  588. {
  589. # line 396 "Calling.puma"
  590.  
  591. unsigned char string[256];
  592.  
  593.   if (c == NoCallGraph) return;
  594.   if (c->Kind == kCallEdgeList) {
  595. # line 400 "Calling.puma"
  596.   {
  597. # line 401 "Calling.puma"
  598.    OutCallEdges (c->CallEdgeList.Node);
  599. # line 402 "Calling.puma"
  600.  if (c->CallEdgeList.count > 1)
  601.              fprintf (CGFile,"(%d)", c->CallEdgeList.count);
  602. # line 404 "Calling.puma"
  603.  if (c->CallEdgeList.Next != NoCallGraph)
  604.             { fprintf (CGFile,",");
  605.               OutCallEdges (c->CallEdgeList.Next);  }
  606.  
  607.   }
  608.    return;
  609.  
  610.   }
  611.   if (c->Kind == kCallNode) {
  612.   if (c->CallNode.val->Kind == kProcObject) {
  613. # line 410 "Calling.puma"
  614.   {
  615. # line 411 "Calling.puma"
  616.    GetString (c->CallNode.val->ProcObject.ident, string);
  617. # line 412 "Calling.puma"
  618.    fprintf (CGFile, "%s", string);
  619.   }
  620.    return;
  621.  
  622.   }
  623.   if (c->CallNode.val->Kind == kFuncObject) {
  624. # line 415 "Calling.puma"
  625.   {
  626. # line 416 "Calling.puma"
  627.    GetString (c->CallNode.val->FuncObject.ident, string);
  628. # line 417 "Calling.puma"
  629.    fprintf (CGFile, "%s", string);
  630.   }
  631.    return;
  632.  
  633.   }
  634.   }
  635. ;
  636. }
  637.  
  638. static int UnitKind
  639. # if defined __STDC__ | defined __cplusplus
  640. (register tDefinitions o)
  641. # else
  642. (o)
  643.  register tDefinitions o;
  644. # endif
  645. {
  646.   if (o->Kind == kProcObject) {
  647.   if (o->ProcObject.decl->Kind == kPROC_DECL) {
  648. # line 422 "Calling.puma"
  649.    return 0;
  650.  
  651.   }
  652.   if (o->ProcObject.decl->Kind == kINTRINSIC_DECL) {
  653. # line 430 "Calling.puma"
  654.    return 1;
  655.  
  656.   }
  657.   if (o->ProcObject.decl->Kind == kEXT_PROC_DECL) {
  658. # line 438 "Calling.puma"
  659.    return 2;
  660.  
  661.   }
  662.   }
  663.   if (o->Kind == kFuncObject) {
  664.   if (o->FuncObject.decl->Kind == kFUNC_DECL) {
  665. # line 426 "Calling.puma"
  666.    return 0;
  667.  
  668.   }
  669.   if (o->FuncObject.decl->Kind == kINTRINSIC_DECL) {
  670. # line 434 "Calling.puma"
  671.    return 1;
  672.  
  673.   }
  674.   if (o->FuncObject.decl->Kind == kEXT_FUNC_DECL) {
  675. # line 442 "Calling.puma"
  676.    return 2;
  677.  
  678.   }
  679.   }
  680. # line 446 "Calling.puma"
  681.    return 3;
  682.  
  683. }
  684.  
  685. void BeginCalling ()
  686. {
  687. # line 47 "Calling.puma"
  688.  
  689. BeginCallGraphFns ();
  690.  
  691. }
  692.  
  693. void CloseCalling ()
  694. {
  695. }
  696.